package com.leetcode.www;

/**
 * Creared with IntelliJ IDEA.
 * Description:给你一个整数数组 nums 和一个整数 k ，请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。
 * User:yxd
 * Date:2022-05-06
 * Time:17:05
 */
public class Everyday713 {
    public int numSubarrayProductLessThanK(int[] nums, int k) {//滑动窗口
        int n = nums.length, ret = 0;
        int prod = 1, i = 0;
        for (int j = 0; j < n; j++) {
            prod *= nums[j];
            while (i <= j && prod >= k) {//从j这个元素开始看只要满足条件的连续子序列只要满足就算一个
                prod /= nums[i];//每使用一次就删除开头的一个元素,表示头个元素已经使用过了
                i++;//然后到下一个元素
            }
            ret += j - i + 1;//有多少个满足条件的数目,一个元素算一个满足的,另外的加1表示当前元素本身
        }
        return ret;
    }
}
